package com.example.demo.dao;

import com.example.demo.entity.pojo.Homework;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 作业表(Homework)表数据库访问层
 *
 * @author makejava
 * @since 2025-07-13 16:30:30
 */
public interface HomeworkDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Homework queryById(Integer id);

    /**
     * 根据班级ID查询作业列表
     *
     * @param classId 班级ID
     * @return 作业列表
     */
    List<Homework> queryByClassId(@Param("classId") Integer classId);

    /**
     * 根据班级ID列表查询作业（用户所在的所有班级的作业）
     *
     * @param classIds 班级ID列表
     * @return 作业列表
     */
    List<Homework> queryByClassIds(@Param("classIds") List<Integer> classIds);

    /**
     * 根据教师ID查询作业
     *
     * @param teacherId 教师ID
     * @return 作业列表
     */
    List<Homework> queryByTeacherId(@Param("teacherId") String teacherId);

    /**
     * 查询所有作业
     *
     * @return 作业列表
     */
    List<Homework> queryAll();

    /**
     * 根据班级ID和发布状态查询作业
     *
     * @param classId 班级ID
     * @param isPublished 是否已发布（true=已发布，false=未发布）
     * @return 作业列表
     */
    List<Homework> queryByClassIdAndStatus(@Param("classId") Integer classId, 
                                          @Param("isPublished") Boolean isPublished);

    /**
     * 新增数据
     *
     * @param homework 实例对象
     * @return 影响行数
     */
    int insert(Homework homework);

    /**
     * 修改数据
     *
     * @param homework 实例对象
     * @return 影响行数
     */
    int update(Homework homework);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 统计班级作业数量
     *
     * @param classId 班级ID
     * @return 作业数量
     */
    long countByClassId(@Param("classId") Integer classId);

    /**
     * 统计教师作业数量
     *
     * @param teacherId 教师ID
     * @return 作业数量
     */
    long countByTeacherId(@Param("teacherId") String teacherId);
}
